Computing technology has transformed the way we work, play, and communicate. The functionality of computing systems is defined by the software code that they execute. Some code is quite straightforward. However, some code may be enormously complex, requiring large teams of skilled programmers in order to generate. In order to author complex code, it is helpful to partition the code into smaller pieces by defining simpler tasks for those smaller pieces, and allowing those pieces to interact. This is the purpose of object-oriented programming.
Accordingly, the program is written such that one code portion may have dependencies on another code portion. For instance, the second code portion may rely on input from the first code portion, or may be initiated only by a call from the first code portion. The first code portion may also be a resource, such as a file, that is required by the second code portion in order to execute. Thus, there may be dependencies at the file level also.
When evaluating the overall functioning and operation of a program, is it helpful to be able to view dependencies of the various code portions. Accordingly, there are existing mechanisms for constructing a dependency graph, modeling the code portions as nodes in the graph, and with the edges in the graph representing dependencies.